import tkinter as tk

# 插值查找函数
def search_inter(d, s):
    low = 0  # 最低索引值
    high = len(d) - 1  # 最高索引值
    # 进入循环（防止索引值溢出）
    while low <= high and s >= d[low] and s <= d[high]:
        # 索引值=最小索引值+(查找值-最小值)×(最大索引值–最小索引值)÷(最大值-最小值),记得向下取整
        index = low + ((s - d[low]) * (high - low)) // (d[high] - d[low])
        # 如果相等就表示找到索引位
        if d[index] == s:
            return index
        if d[index] < s:
            # 如果小于就重新确定最低索引值：预期索引值+1
            low = index + 1
        else:
            # 否则就重新确定最高索引值：预期索引值-1
            high = index - 1
    return -1  # 没找到

# 创建主窗口
root = tk.Tk()
root.title("插值查找")

# 初始化数据
data1 = [1, 2, 3, 4, 5, 6, 7]  # 分布均匀的有序数组
data2 = [3, 5, 7, 11, 13, 17]  # 分布不均匀的有序数组

# 创建标签用于显示结果
result_label = tk.Label(root, text="", justify=tk.LEFT)
result_label.pack(pady=20)

# 查找值
search_value = 5

# 执行查找并显示结果
html = ""
html += f"数组 {data1} 中 {search_value} 的索引值是：{search_inter(data1, search_value)}\n"
html += f"数组 {data2} 中 {search_value} 的索引值是：{search_inter(data2, search_value)}\n"
html += f"数组 {data2} 中 2 的索引值是：{search_inter(data2, 2)}"

# 更新标签文本
result_label.config(text=html)

# 运行主循环
root.mainloop()